iT邦幫忙

2023 iThome 鐵人賽

0
自我挑戰組

Django系列 第 28

Day28~Django 漫漫長路-openai swagger 與 DRF

  • 分享至 

  • xImage
  •  

大家好,我是Leo
今天來介紹的是swaager如何套用在django上面/images/emoticon/emoticon30.gif
OK~~~ Let's go now!!!


什麼是swagger文件?

Swagger 是一組用於編寫基於 REST 的 API 的開源open source 工具。它通過缺口、指定標準和提供編寫美觀、安全、高性能和可擴展的 API 所需的工具來簡化編寫 API 的過程。

想要把原本四散各處而且不完整的 API 文件整理,並且用一個對於工程師而言比較容易取得的方式管理。
以下是圖示:
https://ithelp.ithome.com.tw/upload/images/20230912/20154853nR8C61UuZb.png


安裝套件

pip install drf_yasg

settings.py

INSTALLED_APPS = [
		'drf_yasg'
]

# py路徑
SWAGGER_SETTINGS = {
	'DEFAULT_AUTO_SCHEMA_CLASS':'config.swagger.CustomSwaggerAutoSchema'
}

url.py

from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from rest_framework import permissions

schema_view = get_schema_view(
	openapi.Info(
	title='title',
	default_version='v1',
	description='description'
    ),
	public=True,
    permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    path('swagger/',schema_view.with_ui('swagger'),name='swagger')
   ]

config/swagger.py

這就是剛剛在settings設定DEFAULT_AUTO_SCHEMA_CLASS的路徑

from drf_yasg.inspectors import SwaggerAutoSchema

class CustomSwaggerAutoSchema(SwaggerAutoSchema):
	def get_tags(self,operation_keys=None):
		tags = super().get_tags(operation_keys)
		
		if 'v1' in tags and operation_keys:
			tags[0] = operation_keys[1]
		return tags

views.py

class downloadYoutube(views.APIView):
    permission_classes = (permissions.AllowAny,)
    authentication_classes = []
    @swagger_auto_schema(
        operation_description='取得youtube下載資料',
        tags=['Youtube'],
        responses={200: 'OK'},
    )
     def get(self, request, *args, **kwargs):
        data = request.data
        serializer = self.serializer_class(data=data)
        serializer.is_valid(raise_exception=True)

        try:
            self._delete_image(request)
        except Exception as e:
            msg = e.args if e else ''
            logger.exception(str(e))
            return Response(status=status.HTTP_400_BAD_REQUEST, data=msg)

        return Response(status=status.HTTP_200_OK)

swagger_auto_schema 內參數

def swagger_auto_schema(method=None, methods=None, auto_schema=unset, request_body=None, query_serializer=None,manual_parameters=None, operation_id=None, operation_description=None, operation_summary=None,security=None, deprecated=None, responses=None, field_inspectors=None, filter_inspectors=None,paginator_inspectors=None, tags=None, **extra_overrides):

如下圖所示
https://ithelp.ithome.com.tw/upload/images/20230912/20154853wETK4mLwsM.png


swagger UI 呈現結果

https://ithelp.ithome.com.tw/upload/images/20230912/20154853V015VW2IS3.png


error 問題

Fetch error Internal Server Error http://127.0.0.1:8000/swagger/?format=openapi

無法加載 API 定義。 獲取錯誤內部服務器錯誤http://127.0.0.1:8000/api/v1/swagger/?format=openapi
我們必須找尋runserver下的錯誤代碼,再從錯誤代碼進行著手解決


今天先講解openai swaager文件
明天講解api製作匯出excel檔
我們明天見,各位掰掰~~~/images/emoticon/emoticon29.gif


上一篇
Day27~Django 漫漫長路-踏上windows IIS_02
下一篇
Day29~Django 漫漫長路-DRF API 匯出 excel文檔
系列文
Django30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言